package com.dys.teststreamapi11;

import java.util.Optional;
import java.util.stream.Stream;

/**
 * @className: com.dys.teststreamapi11.StreamAPITest
 * @description: Stream流的函数拼接：match、find、max和min、max
 * @author: pine cone
 * @version: v1.0.0
 * @createTime: 2024/09/01 下午4:39
 */
public class StreamAPITest06 {
    /**
     * 这是一个main()方法,是应用程序的入口
     *
     * @param args 方法的形参列表,是一个字符串数组,包含了从命令行传递给程序的参数
     */
    public static void main(String[] args) {
        streamMin();
    }

    /**
     * match匹配,match是一个终结方法
     */
    private static void streamMatch() {
        boolean flag = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
                // .anyMatch(n -> n > 0);
                // .allMatch(n -> n > 5);
                .noneMatch(n -> n > 5);
        System.out.println("最终匹配的结果：" + flag);
    }

    /**
     * 找到某些数据，可以使用find方法来实现
     */
    private static void streamFindFirst() {
        Optional<Integer> first = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10).findFirst();
        System.out.println("找到的第一个元素是：" + first.get());
    }

    /**
     * 从流中随便找一个元素: 如果向测试找到的结果不一样则使用并行流
     */
    private static void streamFindAny() {
        Optional<Integer> any = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10).findAny();
        System.out.println("流中任意查找一个元素：" + any.get());
    }

    /**
     * 查找流中最大的元素
     */
    private static void streamMax() {
        Optional<Integer> max = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 99, 10).max((o1, o2) -> o1 - o2);
        System.out.println("流中最大的元素：" + max.get());
    }

    /**
     * 查找流中最小的元素
     */
    private static void streamMin() {
        Optional<Integer> min = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 99, 10).min((o1, o2) -> o1 - o2);
        System.out.println("流中最小的元素：" + min.get());
    }

}
